Event Capture, Propagation, Bubbling and Once


Posted by wayne201299 on 2023-10-04

探討冒泡事件

Bubbling 冒泡

當一個點擊事件觸發時,會往上層並觸發觸發所有父層的event

function logText(e) {
    console.log(this.classList.value); 
}
divs.forEach((div) =>
    div.addEventListener("click", logText, {
        capture: false,
    })
);

 // three、two、one

可以在addEventlistener第三個參數添加{capture:true},讓事件改為由外而內觸發,預設是false是從內而外產生冒泡事件

divs.forEach((div) =>
    div.addEventListener("click", logText, {
        capture: true,
    })
);

// one、two、three

也可以透過e.stopPropagation();去停止冒泡事件的發生,讓冒泡只停留在第一層

function logText(e) {
    console.log(this.classList.value); // one
    e.stopPropagation();
}

透過once讓按鈕只觸發一次,原理是這樣的,當button的click event 觸發時,結束動作後,button會透過button.removeEventListener移除監聽器

button.addEventListener(
    "click",
    (e) => {
        console.log("clicked");
    },
    {
        once: true,
    }
);

#javascript #html







Related Posts

[18] 原生功能 Natives - Array、Object、Function、RegExp、Date、Error

[18] 原生功能 Natives - Array、Object、Function、RegExp、Date、Error

Vue.js 學習旅程Mile 7 – 資料屬性綁定篇:v-bind

Vue.js 學習旅程Mile 7 – 資料屬性綁定篇:v-bind

簡明 Python LINE Bot & LIFF JS SDK  入門教學

簡明 Python LINE Bot & LIFF JS SDK 入門教學


Comments